"""
测试Date__Utils功能
"""

from com.tools.Date_Utils import DateUtils
import datetime


def test_date_utils():
    """
    测试日期工具类
    """
    print("测试日期格式转换:")
    
    # 测试解析日期字符串
    date_obj = DateUtils.parse_date("2023-12-25")
    print(f"解析日期字符串: 2023-12-25 -> {date_obj}")
    assert isinstance(date_obj, datetime.datetime)
    
    # 测试格式化日期对象
    date_str = DateUtils.format_date(date_obj, "%d/%m/%Y")
    print(f"格式化日期对象: {date_obj} -> {date_str}")
    assert date_str == "25/12/2023"
    
    # 测试转换日期格式
    new_format = DateUtils.convert_date_format("2023-12-25", "%Y-%m-%d", "%d/%m/%Y")
    print(f"转换日期格式: 2023-12-25 -> {new_format}")
    assert new_format == "25/12/2023"
    
    # 测试中文格式
    chinese_format = DateUtils.convert_date_format("2023-12-25", "%Y-%m-%d", "%Y年%m月%d日")
    print(f"中文格式转换: 2023-12-25 -> {chinese_format}")
    assert chinese_format == "2023年12月25日"
    
    print("\n测试日期加减功能:")
    
    # 创建测试日期
    date = datetime.datetime(2023, 1, 1, 12, 0, 0)
    print(f"基准日期: {DateUtils.format_date(date, '%Y-%m-%d %H:%M:%S')}")
    
    # 测试增加年份
    new_date = DateUtils.add_years(date, 2)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加2年: {formatted_date}")
    assert formatted_date == "2025-01-01 12:00:00"
    
    # 测试减少年份
    new_date = DateUtils.add_years(date, -1)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"减少1年: {formatted_date}")
    assert formatted_date == "2022-01-01 12:00:00"
    
    # 测试增加月份
    new_date = DateUtils.add_months(date, 3)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加3个月: {formatted_date}")
    assert formatted_date == "2023-04-01 12:00:00"
    
    # 测试增加天数
    new_date = DateUtils.add_days(date, 10)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加10天: {formatted_date}")
    assert formatted_date == "2023-01-11 12:00:00"
    
    # 测试增加小时数
    new_date = DateUtils.add_hours(date, 5)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加5小时: {formatted_date}")
    assert formatted_date == "2023-01-01 17:00:00"
    
    # 测试增加分钟数
    new_date = DateUtils.add_minutes(date, 30)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加30分钟: {formatted_date}")
    assert formatted_date == "2023-01-01 12:30:00"
    
    # 测试增加秒数
    new_date = DateUtils.add_seconds(date, 45)
    formatted_date = DateUtils.format_date(new_date, "%Y-%m-%d %H:%M:%S")
    print(f"增加45秒: {formatted_date}")
    assert formatted_date == "2023-01-01 12:00:45"
    
    print("\n测试年龄计算功能:")
    
    # 测试计算周岁年龄 (使用固定基准日期)
    birth_date = datetime.date(1990, 5, 15)
    test_current_date = datetime.date(2023, 1, 1)
    age = DateUtils.calculate_age(birth_date, test_current_date)
    print(f"出生日期: {birth_date}, 在{test_current_date}时的年龄: {age}岁")
    
    # 测试指定当前日期计算年龄
    current_date = datetime.date(2023, 1, 1)
    age = DateUtils.calculate_age(birth_date, current_date)
    print(f"在{current_date}时的年龄: {age}岁")
    assert age == 32  # 2023-01-01时，1990-05-15出生的人32岁
    
    # 测试根据出生日期和年龄计算目标日期
    target_date = DateUtils.add_age(birth_date, 18)  # 计算18岁生日
    formatted_date = DateUtils.format_date(target_date, '%Y-%m-%d')
    print(f"18岁生日: {formatted_date}")
    assert formatted_date == "2008-05-15"
    
    print("\n测试随机日期生成:")
    
    # 测试在指定日期范围内随机生成日期
    start_date = datetime.date(2020, 1, 1)
    end_date = datetime.date(2023, 12, 31)
    random_date = DateUtils.random_date(start_date, end_date)
    formatted_date = DateUtils.format_date(random_date, '%Y-%m-%d %H:%M:%S')
    print(f"随机日期: {formatted_date}")
    
    # 验证随机日期在范围内
    random_date_only = random_date.date()
    assert start_date <= random_date_only <= end_date
    
    # 测试使用字符串格式随机生成日期
    random_date_str = DateUtils.random_date_with_format("2020-01-01", "2023-12-31", "%Y-%m-%d")
    print(f"随机日期字符串: {random_date_str}")
    assert len(random_date_str) == 10  # YYYY-MM-DD格式
    
    # 测试使用自定义格式随机生成日期
    random_date_str = DateUtils.random_date_with_format("01/01/2020", "12/31/2023", "%m/%d/%Y")
    print(f"随机日期字符串(美式): {random_date_str}")
    
    print("\n所有测试通过!")


if __name__ == "__main__":
    test_date_utils()